perm filename INTDIA.SAI[DIA,HPM] blob sn#506111 filedate 1980-04-26 generic text, type T, neo UTF8
BEGIN "INTDIA"
comment  diagrams for interest operator chapter;
REQUIRE "TYPHDR.SAI[GOD,HPM]" SOURCE_FILE;
INTEGER FJ;

comment figure 5-2;
   BEGIN
   PROCEDURE ARROW(REAL X1,Y1,X2,Y2);
      BEGIN
      REAL DX,DY,D; REAL ARRAY HEADX,HEADY[1:3];
      LINE(X1,Y1,X2,Y2,2); DX←X2-X1; DY←Y2-Y1; D←SQRT(DX↑2+DY↑2);
      DX←0.17*DX/D; DY←0.17*DY/D;
      HEADX[1]←X2; HEADY[1]←Y2;
      HEADX[2]←X2-DX-DY/4;  HEADY[2]←Y2-DY+DX/4;
      HEADX[3]←X2-DX+DY/4;  HEADY[3]←Y2-DY-DX/4;
      POLYGO(3,HEADX[1],HEADY[1]);
      END;

   PROCEDURE GRID(REAL X,Y; INTEGER N,IO,JO);
      BEGIN
      INTEGER I,J;
      STRING PROCEDURE OFS(INTEGER O);
	 BEGIN
	 SETFORMAT(0,0);
	 RETURN(IF O=0 THEN "" ELSE IF O>0 THEN "+"&CVS(O) ELSE CVS(O));
	 END;
      LITEN; 
      FOR I←0 STEP 1 UNTIL N DO
	 BEGIN
	 LINE(X+I,Y,X+I,Y+N,3);
	 LINE(X,Y+I,X+N,Y+I,3);
	 END;
      SETFORMAT(0,0);
      FOR I←0 STEP 1 UNTIL N-1 DO
      FOR J←0 STEP 1 UNTIL N-1 DO
	 BEGIN
	 FNTPOS(X+.5+J,Y+N-.5-I);
	 DEPOSIT(0,0,CENTER(JSUB(JTXT(2,"P"),JTXT(3,CVS(I)&","&CVS(J)))));
	 IF I+IO<N ∧ I+IO≥0 ∧ I<N ∧ J<(IF IO≠0 THEN N ELSE N-1) THEN
	   ARROW(X+.5+J,Y+N-.5-I,X+.5+J+JO,Y+N-.5-I-IO);
	 END;
      FNTPOS(X+2,Y-1.5);
      DEPOSIT(0,0,CENTER(
	 JEXP(JCAT4(JTXT(4,"S"),
		    JSUB(JTXT(2,"(P"),JTXT(3,"I,J")),
		    JSUB(JTXT(2,"-P"),JTXT(3,"I"&OFS(IO)&",J"&OFS(JO))),
		    JTXT(2,")")),JTXT(2,"2"))));
      END;


   FJ←FILJOB("DSK:5-2.GOD[DIA,HPM]");

   DDINIT; SCREEN(0,0,15,16);

   FNTSELECT(1,"NONM"); comment Main text font;
   FNTSELECT(2,"METMBM"); comment math font.;
   FNTSELECT(3,"METSBM"); comment Small math font for sub-superscripts.;
   FNTSELECT(4,"GRKL40"); comment Big greek, for use with math font.;
   FNTSELECT(5,"GRKL30"); comment Medium greek, for use with math font.;
   FNTSELECT(6,"BDR40"); comment Source of large bars, brackets, parens, R.;

   GRID(2,11,4,0,1); GRID(9,11,4,1,0); GRID(2,3,4,1,1); GRID(9,3,4,1,-1);

   DPYUP(-1);
   KILJOB(FJ);

   END;
comment figure 5-3;
   BEGIN
   REAL X,Y;
   PROCEDURE GRIDA(REAL X,Y; INTEGER N,T);
      BEGIN
      INTEGER I;
      LITEN; 
      FOR I←0 STEP 1 UNTIL N DO
	 BEGIN
	 LINE(X+I,Y,X+I,Y+N,T);
	 LINE(X,Y+I,X+N,Y+I,T);
	 END;
      END;

   PROCEDURE OUTL(REAL X,Y,W,D; INTEGER T);
      BEGIN
      REAL V;
      FOR V←X+D,X+W-D DO LINE(V,Y+D,V,Y+W-D,T);
      FOR V←Y+D,Y+W-D DO LINE(X+D,V,X+W-D,V,T);
      END;

   FJ←FILJOB("DSK:5-3.GOD[DIA,HPM]");

   DDINIT; SCREEN(-4,-4,16,16);

   GRIDA(0,0,12,1);
   FOR X←0,4,8 DO FOR Y←0,4,8 DO OUTL(X,Y,4,0,5);
   FOR X←0,4,8 DO FOR Y←2,6 DO OUTL(X,Y,4,.15,5);
   FOR X←2,6 DO FOR Y←0,4,8 DO OUTL(X,Y,4,.15,5);
   FOR X←2,6 DO FOR Y←2,6 DO OUTL(X,Y,4,.3,5);

   DPYUP(-1);
   KILJOB(FJ);
   END;
END;